/**
 * 门店API测试
 * 
 * 用途：测试门店API的实际调用，验证是否能获取到真实数据
 * 方法：直接调用API服务，打印请求和响应信息
 * 原理：通过单元测试验证API连接和数据解析是否正常
 */
package com.example.brain_wave.test.store_room

import com.example.brain_wave.api.service.StoreRoomApiService
import kotlinx.coroutines.runBlocking
import org.junit.Test
import org.junit.Assert.*

class StoreApiTest {
    
    private val apiService = StoreRoomApiService()
    
    @Test
    fun testGetStoresFromApi() {
        runBlocking {
            println("开始测试门店API...")
            println("API URL: http://192.168.2.3:8000/admin/store/apiStores?limit=100&page=1")
            println("请求头: token=jsw2hSS8ypfheSX5, server=1")
            
            try {
                val result = apiService.getStores()
                
                if (result.isSuccess) {
                    val stores = result.getOrNull()
                    println("API调用成功！")
                    println("获取到门店数量: ${stores?.size ?: 0}")
                    
                    stores?.forEach { store ->
                        println("门店信息: ID=${store.id}, 名称=${store.name}, 省份=${store.province_id_text}")
                        
                        // 检查是否有南京门店
                        if (store.id == 14 && store.name.contains("南京")) {
                            println("✅ 找到南京门店: ID=14, 名称=${store.name}")
                        }
                    }
                    
                    // 验证至少有一个门店
                    assertTrue("应该至少获取到一个门店", stores != null && stores.isNotEmpty())
                    
                    // 查找南京门店
                    val nanjingStore = stores?.find { it.id == 14 }
                    if (nanjingStore != null) {
                        println("✅ 成功找到南京门店: ${nanjingStore.name}")
                        assertEquals("南京门店ID应该是14", 14, nanjingStore.id)
                        assertTrue("门店名称应该包含'南京'", nanjingStore.name.contains("南京"))
                    } else {
                        println("⚠️ 未找到ID为14的南京门店")
                    }
                    
                } else {
                    val error = result.exceptionOrNull()
                    println("❌ API调用失败: ${error?.message}")
                    println("错误详情: ${error?.stackTraceToString()}")
                    fail("API调用失败: ${error?.message}")
                }
                
            } catch (e: Exception) {
                println("❌ 测试过程中发生异常: ${e.message}")
                println("异常详情: ${e.stackTraceToString()}")
                fail("测试异常: ${e.message}")
            }
        }
    }
    
    @Test
    fun testGetRoomsFromApi() {
        runBlocking {
            println("开始测试房间API...")
            
            try {
                // 使用南京门店ID=14测试房间获取
                val storeId = 14
                println("测试获取门店ID=$storeId 的房间列表")
                
                val result = apiService.getRooms(storeId)
                
                if (result.isSuccess) {
                    val rooms = result.getOrNull()
                    println("API调用成功！")
                    println("获取到房间数量: ${rooms?.size ?: 0}")
                    
                    rooms?.forEach { room ->
                        println("房间信息: ID=${room.id}, 名称=${room.name}, 门店ID=${room.store_id}")
                    }
                    
                    // 验证房间数据
                    if (rooms != null && rooms.isNotEmpty()) {
                        assertTrue("应该至少获取到一个房间", rooms.isNotEmpty())
                        rooms.forEach { room ->
                            assertEquals("房间的门店ID应该匹配", storeId, room.store_id)
                        }
                    } else {
                        println("⚠️ 门店ID=$storeId 没有房间数据")
                    }
                    
                } else {
                    val error = result.exceptionOrNull()
                    println("❌ 房间API调用失败: ${error?.message}")
                    println("错误详情: ${error?.stackTraceToString()}")
                }
                
            } catch (e: Exception) {
                println("❌ 房间测试过程中发生异常: ${e.message}")
                println("异常详情: ${e.stackTraceToString()}")
            }
        }
    }
    
    @Test
    fun testNetworkConnectivity() {
        println("测试网络连接...")
        
        try {
            val url = java.net.URL("http://192.168.2.3:8000")
            val connection = url.openConnection()
            connection.connectTimeout = 5000
            connection.readTimeout = 5000
            connection.connect()
            println("✅ 网络连接正常")
        } catch (e: Exception) {
            println("❌ 网络连接失败: ${e.message}")
            println("请检查:")
            println("1. 设备是否连接到正确的网络")
            println("2. IP地址 192.168.2.3 是否可达")
            println("3. 端口 8000 是否开放")
            println("4. 防火墙设置")
        }
    }
}